Java-তে Date এবং Time Serialization এবং Deserialization করার জন্য Jackson খুবই কার্যকর। তবে, ডিফল্ট সেটআপে java.util.Date, LocalDate, LocalDateTime ইত্যাদি Object-কে JSON-এ রূপান্তর করার সময় ফরম্যাটটি আপনার পছন্দ মতো নাও হতে পারে। এই সমস্যা সমাধানের জন্য আপনি Custom Date Format ব্যবহার করতে পারেন।
ডিফল্ট Date Serialization
উদাহরণ:
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Date;
public class DefaultDateExample {
public static void main(String[] args) {
try {
ObjectMapper objectMapper = new ObjectMapper();
// Simple Object with Date
Sample sample = new Sample(1, "Example", new Date());
// Object থেকে JSON
String json = objectMapper.writeValueAsString(sample);
System.out.println("Default Date Serialized JSON: " + json);
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Sample {
private int id;
private String name;
private Date date;
public Sample(int id, String name, Date date) {
this.id = id;
this.name = name;
this.date = date;
}
// Getters and Setters
}
ডিফল্ট JSON আউটপুট:
{"id":1,"name":"Example","date":1697774542997}
সমস্যা: ডিফল্ট Date Serialization Unix টাইমস্ট্যাম্প আকারে হয়। অনেক সময় এটি ব্যবহারকারী-বান্ধব নয়।
Custom Date Format ব্যবহার
Jackson-এ @JsonFormat এনোটেশন বা ObjectMapper কনফিগারেশন ব্যবহার করে Date ফরম্যাট কাস্টমাইজ করা যায়।
উদাহরণ: @JsonFormat এনোটেশন
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Date;
public class CustomDateExample {
public static void main(String[] args) {
try {
ObjectMapper objectMapper = new ObjectMapper();
// Simple Object with Date
CustomSample sample = new CustomSample(1, "Example", new Date());
// Object থেকে JSON
String json = objectMapper.writeValueAsString(sample);
System.out.println("Custom Date Serialized JSON: " + json);
} catch (Exception e) {
e.printStackTrace();
}
}
}
class CustomSample {
private int id;
private String name;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private Date date;
public CustomSample(int id, String name, Date date) {
this.id = id;
this.name = name;
this.date = date;
}
// Getters and Setters
}
আউটপুট:
{"id":1,"name":"Example","date":"2024-12-21 12:45:30"}
Global Configuration with ObjectMapper
উদাহরণ:
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class GlobalDateFormatExample {
public static void main(String[] args) {
try {
// ObjectMapper Configuration
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JavaTimeModule());
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
// Custom Object
GlobalSample sample = new GlobalSample(1, "Example", LocalDateTime.now());
// Serialize to JSON
String json = objectMapper.writeValueAsString(sample);
System.out.println("Global Custom Date Serialized JSON: " + json);
} catch (Exception e) {
e.printStackTrace();
}
}
}
class GlobalSample {
private int id;
private String name;
private LocalDateTime dateTime;
public GlobalSample(int id, String name, LocalDateTime dateTime) {
this.id = id;
this.name = name;
this.dateTime = dateTime;
}
// Getters and Setters
}
আউটপুট:
{"id":1,"name":"Example","dateTime":"2024-12-21T12:45:30"}
Custom Serializer ব্যবহার করে Advanced Date Serialization
উদাহরণ:
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class AdvancedDateSerialization {
public static void main(String[] args) {
try {
// Custom Serializer
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JavaTimeModule());
// Custom Object
AdvancedSample sample = new AdvancedSample(1, "Example", LocalDateTime.now());
// Serialize to JSON
String json = objectMapper.writeValueAsString(sample);
System.out.println("Advanced Date Serialized JSON: " + json);
} catch (Exception e) {
e.printStackTrace();
}
}
}
class AdvancedSample {
private int id;
private String name;
@com.fasterxml.jackson.databind.annotation.JsonSerialize(using = LocalDateTimeSerializer.class)
private LocalDateTime dateTime;
public AdvancedSample(int id, String name, LocalDateTime dateTime) {
this.id = id;
this.name = name;
this.dateTime = dateTime;
}
// Getters and Setters
}
class LocalDateTimeSerializer extends JsonSerializer<LocalDateTime> {
@Override
public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
gen.writeString(value.format(formatter));
}
}
আউটপুট:
{"id":1,"name":"Example","dateTime":"2024-12-21 12:45:30"}
সংক্ষেপে
- ডিফল্ট Serialization: Jackson Unix টাইমস্ট্যাম্প ব্যবহার করে।
@JsonFormat: নির্দিষ্ট ফিল্ডের জন্য কাস্টম ফরম্যাট।- Global Configuration: পুরো প্রজেক্টের জন্য একটি নির্দিষ্ট ফরম্যাট।
- Custom Serializer: আরও জটিল ফরম্যাটিং বা লজিক প্রয়োগের জন্য ব্যবহার করা হয়।
Jackson এর এই টেকনিকগুলো আপনাকে Java-তে Date এবং Time Object Serialization এবং Deserialization আরও নমনীয় ও কাস্টমাইজড করতে সহায়তা করে।
Read more